//
//  UIViewController+PushVC.h
//  buka
//
//  Created by 曹飞 on 16/7/5.
//  Copyright © 2016年 songhuipan. All rights reserved.
//

#import <UIKit/UIKit.h>

#import <MBProgressHUD/MBProgressHUD.h>

#define HUD_AFTERDELAY 2 //hud 消失时长


typedef void(^AlertDoneBlock)(void);
typedef void(^AlertCancelBlock)(void);
@interface UIViewController ()
//@property (nonatomic,strong) NSString * device;
@property (nonatomic,strong) AlertDoneBlock doneBlock;
@property (nonatomic,strong) AlertCancelBlock cancelBlock;
@end

/**
 *  VC的一些常用方法
 */
@interface UIViewController (PushVC) <UIAlertViewDelegate>


/**
 push VC 隐藏tabbar

 @param vc vc description
 */
-(void)pushVC:(UIViewController*)vc;

-(void)presentVC:(UIViewController*)vc;


/**
 *  添加导航返回按钮 配合backLastView方法使用，如有其它跳转，请重写backLastView方法
 */
-(void)addBackBtn;


/**
 *  导航栏隐藏的情况下，在self.view 上添加返回按钮 ,白色 ,配合backLastView方法使用，
 *  如有其它跳转，请重写backLastView方法
 *  @param name  title
 *  @param font  font
 *  @param image image
 */
-(void)addBackBtnForHiddenNavigation:(NSString *)name
                            withFont:(UIFont*)font
                           withImage:(UIImage *)image;

/**
 *  导航栏隐藏的情况下，在self.view 上添加title
 *
 *  @param title 标题名
 *  @param color 颜色
 *  @param font  字体
 */
-(void)addTitleForHiddenNavigation:(NSString*)title
                     withTextColor:(UIColor*)color
                          withFont:(UIFont*)font;

/**
 *  返回到哪个位置需要重写，配合-(void)addBackBtn; 使用
 */
- (void)backLastView;

- (void)backToRootVC;
/**
 *  添加导航右边按钮
 *  @param name   名字
 *  @param action 触发事件
 */
-(void)addRightBtnName:(NSString *)name Action:(SEL)action;

/**
 *  导航栏上添加按钮
 *
 *  @param name         按钮名字，不用可以是nil
 *  @param color        按钮名称的颜色
 *  @param bounds       按钮大小
 Bounds:CGRectMake(0, 0, 40, 30)
 *  @param imageName    图片名，不用可以是nil
 *  @param _bool        是否需要POP返回手势 YES添加，NO不添加
 *  @param _leftOrRight YES左边，NO 右边
 *  @param action       执行回调
 */
-(void)addBarBtnName:(NSString *)name
           btnBounds:(CGRect)bounds
           nameColor:(UIColor*)color
         BarBtnImage:(NSString *)imageName
 isGestureRecognizer:(BOOL)_bool
         leftOrRight:(BOOL)_leftOrRight
         actionBlock:(SEL)action;
/**
 *  获得导航栏自定义功能按钮指针
 *
 *  @param leftYESOrRightNO leftYESOrRightNO description
 *
 *  @return 导航栏上左或右自定义的功能按钮指针
 */
-(UIButton *)leftOrRightItemBtn:(BOOL)leftYESOrRightNO;

/**
 *  提示框
 *
 *  @param title      标题
 *  @param message    描述
 *  @param name       确定按钮名称
 *  @param cancelName 取消按钮名称
 *  @param handler    事件回调
 */
-(void)showAlertTitle:(NSString*)title
          withMessage:(NSString*)message
         withDoneName:(NSString*)name
       withCancelName:(NSString*)cancelName
          withHandler:(void (^)(UIAlertAction *action))handler NS_AVAILABLE_IOS(8_0);

-(void)showAlertTitle:(NSString*)title
          withMessage:(NSString*)message
         withDoneName:(NSString*)name
       withCancelName:(NSString*)cancelName
      withDoneHandler:(void (^)(UIAlertAction *action))doneHandler
    withCancelHandler:(void (^)(UIAlertAction *action))cancelHandler NS_AVAILABLE_IOS(8_0);

-(void)showIOS7AlertTitle:(NSString*)title
          withMessage:(NSString*)message
         withDoneName:(NSString*)name
       withCancelName:(NSString*)cancelName
      withDoneHandler:(AlertDoneBlock)doneBlock
    withCancelHandler:(AlertCancelBlock)cancelBlock NS_DEPRECATED_IOS(3_2,9_0, "Use showAlertTitle: ");
/**
 *  MBProgressHUB  self.view 3秒后自动隐藏
 *
 *  @param str             要显示的内容
 *  @param completionBlock 隐藏后执行的回调
 */
- (void)showMBProgressHUD:(NSString *)str completionBlock:(void(^)(void))completionBlock;
/**
 *  MBProgressHUB  self.view 3秒后自动隐藏
 *
 *  @param str 要显示的内容
 */
-(void)showMBProgressHUD:(NSString*)str;

/**
 *  MBProgressHUB  window 3秒后自动隐藏
 *
 *  @param str 要显示的内容  循环引用？VC释放不掉？
 */
+(void)showMBProgressHUDInWindow:(NSString*)str;






/**
 *   页面toast
 *
 *  @param delay 显示几秒
 *  @param _str  需要显示的字符串
 *  @param label 标签控件引用
 *  @brief 控制一个label显示3秒钟然后再隐藏，外部需要手动创建一个label并设置为隐藏
 */
-(void)showToHidenToast:(NSString *)_str
               andLabel:(UILabel*)label
          andAfterDelay:(NSTimeInterval)delay;

/**
 *   根据键盘弹出，移动视图
 *
 *  @param h 高度
 */
-(void) autoMovekeyBoard: (float) h;


/**
 *  计算cell内容视图的宽度
 *
 *  @return 宽度
 */
- (CGFloat)cellContentViewWith;



/**
 *  对于网络请求错误进行提示
 *
 *  @param error 传入错误
 */
+(void)errorReport:(NSError*)error;


/**
 选择相册

 @param block 返回图片，isSelectOriginalPhoto YES表示原图
 */
-(void)showPhotoVC:(void (^)(NSArray<UIImage *> *photos,NSArray *assets,BOOL isSelectOriginalPhoto))block;

@end
